home *** CD-ROM | disk | FTP | other *** search
/ Amiga CD-Sensation: Golden Games / Amiga CD-Sensation - Ausgabe 2 - Golden Games (1996)(GTI - Schatztruhe)(DE)[!].iso / Adventurer's / ImpPro / Scripts / RandomMaze.dungeon < prev    next >
Text File  |  1995-05-02  |  2KB  |  74 lines

  1. /* Random maze generating script for Imp Professional via the Dungeon Module
  2.    (C) Zach Forsyth 1995
  3.    $VER: 0.5
  4. */
  5.  
  6. options results
  7. address IMPDUNGEON.1
  8.  
  9. call random(,,time('s'))   /* Seed the random # generator */
  10.  
  11. GET MAPX
  12. max_x = RESULT         /* Get the maximum X value */
  13. GET MAPY
  14. max_y = RESULT         /* Get the maximum Y value */
  15. GET BRUSH
  16. orig_brush = RESULT    /* Store user's original brush */
  17.  
  18. twisty = 3    /* Higher twisty values make the maze less twisty :) */
  19. iter = 1000   /* Number of iterations */
  20.  
  21. x = random(0, max_x)   /* Random X and Y */
  22. y = random(0, max_y)
  23. d = random(0, 3)       /* Random direction */
  24.  
  25. SETBRUSH 1
  26.  
  27. do i = 0 to iter
  28.    PAINT x y
  29.    ok = RESULT
  30.    if (i // 25) = 0 then do
  31.       s = "Iteration " || i || " of " || iter
  32.       MESSAGE s
  33.    end
  34.    r = random(0, twisty)
  35.    if r = 0 then do
  36.       r = random(0, 1)
  37.       if r = 0 then do
  38.          d = d - 1
  39.          if d < 0 then d = 3
  40.       end
  41.       else do
  42.          d = d + 1
  43.          if d > 3 then d = 0
  44.       end
  45.    end
  46.    select
  47.       when d = 0 then y = y - 1
  48.       when d = 1 then x = x + 1
  49.       when d = 2 then y = y + 1
  50.       when d = 3 then x = x - 1
  51.       otherwise nop
  52.    end
  53.  
  54.    if x < 0 then do     /* Hit the west border, turn around */
  55.       x = 0
  56.       d = 1
  57.    end
  58.    if x > max_x then do /* Hit the east border, turn around */
  59.       x = max_x
  60.       d = 3
  61.    end
  62.    if y < 0 then do     /* Hit the north border, turn around */
  63.       y = 0
  64.       d = 2
  65.    end
  66.    if y > max_y then do /* Hit the south border, turn around */
  67.       y = max_y
  68.       d = 0
  69.    end
  70. end
  71.  
  72. MESSAGE               /* Proper script behavior, return things to */
  73. SETBRUSH orig_brush   /* the way they were before the script ran  */
  74.